<?xml version='1.0' encoding='utf-8' standalone='yes'?>
<instrumentationManifest
    xmlns="http://schemas.microsoft.com/win/2004/08/events"
    xmlns:win="http://manifests.microsoft.com/win/2004/08/windows/events"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://schemas.microsoft.com/win/2004/08/events eventman.xsd"
    >
  <instrumentation>
    <events>
      <provider
          guid="{580bbdea-b364-4369-b291-d3539e35d20b}"
          messageFileName="%systemroot%\system32\drivers\xdp.sys"
          name="Microsoft-XDP"
          resourceFileName="%systemroot%\system32\drivers\xdp.sys"
          symbol="MICROSOFT_XDP_PROVIDER"
          >
        <channels>
          <channel
              chid="CHID_XDP"
              isolation="System"
              name="Microsoft-XDP/Diagnostic"
              symbol="CHANNEL_XDP"
              type="Analytic"
              />
        </channels>
        <levels>
          <level
            name="XdpPerIo"
            symbol="LEVEL_XDP_PER_IO"
            value="20"
            />
          <level
            name="XdpPerFrame"
            symbol="LEVEL_XDP_PER_FRAME"
            value="25"
            />
        </levels>
        <keywords>
          <keyword
            name="Tx"
            mask="0x1"
            symbol="TX_KEYWORD"
            />
          <keyword
            name="Rx"
            mask="0x2"
            symbol="RX_KEYWORD"
            />
          <keyword
            name="Xsk"
            mask="0x4"
            symbol="XSK_KEYWORD"
            />
          <keyword
            name="Generic"
            mask="0x8"
            symbol="GENERIC_KEYWORD"
            />
          <keyword
            name="Ec"
            mask="0x10"
            symbol="EC_KEYWORD"
            />
          <keyword
            name="Ebpf"
            mask="0x20"
            symbol="EBPF_KEYWORD"
            />
        </keywords>
        <opcodes>
          <opcode
            name="Xsk"
            value="11"
            />
          <opcode
            name="GenericTxQueue"
            value="12"
            />
          <opcode
            name="GenericRxFilter"
            value="13"
            />
          <opcode
            name="ExecutionContext"
            value="14"
            />
        </opcodes>
        <templates>
          <template tid="tid_Empty"/>
          <template tid="tid_XskNotifyPoke">
            <data
                inType="win:Pointer"
                name="Xsk"
                outType="win:HexInt64"
                />
            <data
                inType="win:UInt32"
                name="Flags"
                outType="win:HexInt32"
                />
          </template>
          <template tid="tid_XskCreateSocket">
            <data
                inType="win:Pointer"
                name="Xsk"
                outType="win:HexInt64"
                />
            <data
                inType="win:Pointer"
                name="ProcessId"
                outType="win:HexInt64"
                />
          </template>
          <template tid="tid_Xsk">
            <data
                inType="win:Pointer"
                name="Xsk"
                outType="win:HexInt64"
                />
          </template>
          <template tid="tid_XskTxEnqueue">
            <data
                inType="win:Pointer"
                name="Xsk"
                outType="win:HexInt64"
                />
            <data
                inType="win:UInt32"
                name="XskTxIndex"
                outType="win:HexInt32"
                />
            <data
                inType="win:UInt32"
                name="XdpTxIndex"
                outType="win:HexInt32"
                />
          </template>
          <template tid="tid_XskTxBind">
            <data
                inType="win:Pointer"
                name="Xsk"
                outType="win:HexInt64"
                />
            <data
                inType="win:Pointer"
                name="XdpInterfaceQueue"
                outType="win:HexInt64"
                />
          </template>
          <template tid="tid_GenericTxEnqueue">
            <data
                inType="win:Pointer"
                name="TxQueue"
                outType="win:HexInt64"
                />
            <data
                inType="win:UInt32"
                name="XdpTxIndex"
                outType="win:HexInt32"
                />
            <data
                inType="win:UInt64"
                name="NblBatchIndex"
                outType="win:HexInt64"
                />
          </template>
          <template tid="tid_GenericTxPostBatch">
            <data
                inType="win:Pointer"
                name="TxQueue"
                outType="win:HexInt64"
                />
            <data
                inType="win:UInt64"
                name="NblBatchIndex"
                outType="win:HexInt64"
                />
          </template>
          <template tid="tid_GenericRxInspectBatch">
            <data
                inType="win:Pointer"
                name="Generic"
                outType="win:HexInt64"
                />
          </template>
          <template tid="tid_XskRxPostBatch">
            <data
                inType="win:Pointer"
                name="Xsk"
                outType="win:HexInt64"
                />
            <data
                inType="win:UInt32"
                name="XskRxIndex"
                outType="win:HexInt32"
                />
            <data
                inType="win:UInt32"
                name="BatchSize"
                outType="win:HexInt32"
                />
          </template>
          <template tid="tid_GenericTxCompleteBatch">
            <data
                inType="win:Pointer"
                name="TxQueue"
                outType="win:HexInt64"
                />
            <data
                inType="win:UInt64"
                name="BatchSize"
                outType="win:HexInt64"
                />
          </template>
          <template tid="tid_XskTxCompleteBatch">
            <data
                inType="win:Pointer"
                name="Xsk"
                outType="win:HexInt64"
                />
            <data
                inType="win:UInt32"
                name="XskTxIndex"
                outType="win:HexInt32"
                />
            <data
                inType="win:UInt32"
                name="BatchSize"
                outType="win:HexInt32"
                />
          </template>
          <template tid="tid_EcStateChange">
            <data
                inType="win:Pointer"
                name="Ec"
                outType="win:HexInt64"
                />
            <data
                inType="win:UInt32"
                name="NewState"
                outType="win:HexInt32"
                />
          </template>
          <template tid="tid_XskNotifyStart">
            <data
                inType="win:Pointer"
                name="Xsk"
                outType="win:HexInt64"
                />
            <data
                inType="win:Pointer"
                name="Irp"
                outType="win:HexInt64"
                />
            <data
                inType="win:UInt32"
                name="InFlags"
                outType="win:HexInt32"
                />
            <data
                inType="win:UInt32"
                name="TimeoutMilliseconds"
                outType="win:HexInt32"
                />
          </template>
          <template tid="tid_XskNotifyStop">
            <data
                inType="win:Pointer"
                name="Xsk"
                outType="win:HexInt64"
                />
            <data
                inType="win:Pointer"
                name="Irp"
                outType="win:HexInt64"
                />
            <data
                inType="win:UInt32"
                name="OutFlags"
                outType="win:HexInt32"
                />
            <data
                inType="win:UInt32"
                name="Status"
                outType="win:NTSTATUS"
                />
          </template>
          <template tid="tid_XskNotifyAsyncComplete">
            <data
                inType="win:Pointer"
                name="Xsk"
                outType="win:HexInt64"
                />
            <data
                inType="win:Pointer"
                name="Irp"
                outType="win:HexInt64"
                />
            <data
                inType="win:UInt32"
                name="Status"
                outType="win:NTSTATUS"
                />
          </template>
          <template tid="tid_EbpfProgramFailure">
            <data
                inType="win:Pointer"
                name="ClientBindingContext"
                outType="win:HexInt64"
                />
            <data
                inType="win:UInt32"
                name="EbpfResult"
                outType="win:HexInt32"
                />
          </template>
        </templates>
        <events>
          <event
              channel="CHID_XDP"
              keywords="Xsk Tx Rx"
              level="XdpPerIo"
              message="$(string.XskNotifyPokeStart.EventMessage)"
              opcode="Xsk"
              symbol="XskNotifyPokeStart"
              template="tid_XskNotifyPoke"
              value="1"
              />
          <event
              channel="CHID_XDP"
              keywords="Xsk Tx Rx"
              level="XdpPerIo"
              message="$(string.XskNotifyPokeStop.EventMessage)"
              opcode="Xsk"
              symbol="XskNotifyPokeStop"
              template="tid_XskNotifyPoke"
              value="2"
              />
          <event
              channel="CHID_XDP"
              keywords="Xsk"
              level="win:Informational"
              message="$(string.XskCreateSocket.EventMessage)"
              opcode="Xsk"
              symbol="XskCreateSocket"
              template="tid_XskCreateSocket"
              value="3"
              />
          <event
              channel="CHID_XDP"
              keywords="Xsk"
              level="win:Informational"
              message="$(string.XskCloseSocketStart.EventMessage)"
              opcode="Xsk"
              symbol="XskCloseSocketStart"
              template="tid_Xsk"
              value="4"
              />
          <event
              channel="CHID_XDP"
              keywords="Xsk"
              level="win:Informational"
              message="$(string.XskCloseSocketStop.EventMessage)"
              opcode="Xsk"
              symbol="XskCloseSocketStop"
              template="tid_Xsk"
              value="5"
              />
          <event
              channel="CHID_XDP"
              keywords="Xsk Tx"
              level="XdpPerFrame"
              message="$(string.XskTxEnqueue.EventMessage)"
              opcode="Xsk"
              symbol="XskTxEnqueue"
              template="tid_XskTxEnqueue"
              value="6"
              />
          <event
              channel="CHID_XDP"
              keywords="Xsk"
              level="win:Informational"
              message="$(string.XskTxBind.EventMessage)"
              opcode="Xsk"
              symbol="XskTxBind"
              template="tid_XskTxBind"
              value="7"
              />
          <event
              channel="CHID_XDP"
              keywords="Generic Tx"
              level="XdpPerFrame"
              message="$(string.GenericTxEnqueue.EventMessage)"
              opcode="GenericTxQueue"
              symbol="GenericTxEnqueue"
              template="tid_GenericTxEnqueue"
              value="8"
              />
          <event
              channel="CHID_XDP"
              keywords="Generic Tx"
              level="XdpPerIo"
              message="$(string.GenericTxPostBatchStart.EventMessage)"
              opcode="GenericTxQueue"
              symbol="GenericTxPostBatchStart"
              template="tid_GenericTxPostBatch"
              value="9"
              />
          <event
              channel="CHID_XDP"
              keywords="Generic Tx"
              level="XdpPerIo"
              message="$(string.GenericTxPostBatchStop.EventMessage)"
              opcode="GenericTxQueue"
              symbol="GenericTxPostBatchStop"
              template="tid_GenericTxPostBatch"
              value="10"
              />
          <event
              channel="CHID_XDP"
              keywords="Generic Rx"
              level="XdpPerIo"
              message="$(string.GenericRxInspectStart.EventMessage)"
              opcode="GenericRxFilter"
              symbol="GenericRxInspectStart"
              template="tid_GenericRxInspectBatch"
              value="11"
              />
          <event
              channel="CHID_XDP"
              keywords="Generic Rx"
              level="XdpPerIo"
              message="$(string.GenericRxInspectStop.EventMessage)"
              opcode="GenericRxFilter"
              symbol="GenericRxInspectStop"
              template="tid_GenericRxInspectBatch"
              value="12"
              />
          <event
              channel="CHID_XDP"
              keywords="Xsk Rx"
              level="XdpPerIo"
              message="$(string.XskRxPostBatch.EventMessage)"
              opcode="Xsk"
              symbol="XskRxPostBatch"
              template="tid_XskRxPostBatch"
              value="13"
              />
          <event
              channel="CHID_XDP"
              keywords="Generic Tx"
              level="XdpPerIo"
              message="$(string.GenericTxCompleteBatch.EventMessage)"
              opcode="GenericTxQueue"
              symbol="GenericTxCompleteBatch"
              template="tid_GenericTxCompleteBatch"
              value="14"
              />
          <event
              channel="CHID_XDP"
              keywords="Xsk Tx"
              level="XdpPerIo"
              message="$(string.XskTxCompleteBatch.EventMessage)"
              opcode="Xsk"
              symbol="XskTxCompleteBatch"
              template="tid_XskTxCompleteBatch"
              value="15"
              />
          <event
              keywords="Ec"
              level="XdpPerIo"
              message="$(string.EcStateChange.EventMessage)"
              opcode="ExecutionContext"
              symbol="EcStateChange"
              template="tid_EcStateChange"
              value="16"
              />
          <event
              channel="CHID_XDP"
              keywords="Xsk Tx Rx"
              level="XdpPerIo"
              message="$(string.XskNotifyStart.EventMessage)"
              opcode="Xsk"
              symbol="XskNotifyStart"
              template="tid_XskNotifyStart"
              value="17"
              />
          <event
              channel="CHID_XDP"
              keywords="Xsk Tx Rx"
              level="XdpPerIo"
              message="$(string.XskNotifyStop.EventMessage)"
              opcode="Xsk"
              symbol="XskNotifyStop"
              template="tid_XskNotifyStop"
              value="18"
              />
          <event
              channel="CHID_XDP"
              keywords="Xsk Tx Rx"
              level="XdpPerIo"
              message="$(string.XskNotifyAsyncComplete.EventMessage)"
              opcode="Xsk"
              symbol="XskNotifyAsyncComplete"
              template="tid_XskNotifyAsyncComplete"
              value="19"
              />
          <event
              channel="CHID_XDP"
              keywords="Rx Tx Ebpf"
              level="XdpPerFrame"
              message="$(string.EbpfProgramFailure.EventMessage)"
              opcode="Xsk"
              symbol="EbpfProgramFailure"
              template="tid_EbpfProgramFailure"
              value="20"
              />
        </events>
      </provider>
    </events>
  </instrumentation>
  <localization xmlns="http://schemas.microsoft.com/win/2004/08/events">
    <resources culture="en-US">
      <stringTable>
        <string
            id="XskNotifyPokeStart.EventMessage"
            value="[ xsk][%1] notify poke Flags=%2"
            />
        <string
            id="XskNotifyPokeStop.EventMessage"
            value="[ xsk][%1] notify poke complete Flags=%2"
            />
        <string
            id="XskCreateSocket.EventMessage"
            value="[ xsk][%1] create socket ProcessId=%2"
            />
        <string
            id="XskCloseSocketStart.EventMessage"
            value="[ xsk][%1] close socket"
            />
        <string
            id="XskCloseSocketStop.EventMessage"
            value="[ xsk][%1] close socket complete"
            />
        <string
            id="XskTxEnqueue.EventMessage"
            value="[ xsk][%1] enqueue TX XskTxIndex=%2 XdpTxIndex=%3"
            />
        <string
            id="XskTxBind.EventMessage"
            value="[ xsk][%1] bind TX XdpInterfaceQueue=%2"
            />
        <string
            id="GenericTxEnqueue.EventMessage"
            value="[gxtq][%1] enqueue TX XdpTxIndex=%2 NblBatchIndex=%3"
            />
        <string
            id="GenericTxPostBatchStart.EventMessage"
            value="[gxtq][%1] post TX batch NblBatchIndex=%2"
            />
        <string
            id="GenericTxPostBatchStop.EventMessage"
            value="[gxtq][%1] post TX batch complete NblBatchIndex=%2"
            />
        <string
            id="GenericRxInspectStart.EventMessage"
            value="[gxrf][%1] inspect RX batch"
            />
        <string
            id="GenericRxInspectStop.EventMessage"
            value="[gxrf][%1] inspect RX batch complete"
            />
        <string
            id="XskRxPostBatch.EventMessage"
            value="[ xsk][%1] post RX batch XskRxIndex=%2 BatchSize=%3"
            />
        <string
            id="GenericTxCompleteBatch.EventMessage"
            value="[gxtq][%1] complete TX batch BatchSize=%2"
            />
        <string
            id="XskTxCompleteBatch.EventMessage"
            value="[ xsk][%1] complete TX batch XskTxIndex=%2 BatchSize=%3"
            />
        <string
            id="EcStateChange.EventMessage"
            value="[  ec][%1] state change NewState=%2"
            />
        <string
            id="XskNotifyStart.EventMessage"
            value="[ xsk][%1] notify Irp=%2 InFlags=%3 TimeoutMs=%4"
            />
        <string
            id="XskNotifyStop.EventMessage"
            value="[ xsk][%1] notify complete Irp=%2 OutFlags=%3 Status=%4"
            />
        <string
            id="XskNotifyAsyncComplete.EventMessage"
            value="[ xsk][%1] notify pended complete Irp=%2 Status=%3"
            />
        <string
            id="EbpfProgramFailure.EventMessage"
            value="[ebpf][%1] program failed EbpfResult=%2"
            />
      </stringTable>
    </resources>
  </localization>
</instrumentationManifest>
